#ifndef SQL_MCDEFINE_H
#define SQL_MCDEFINE_H


#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlQueryModel>
#include <QSqlError>
#include <QQmlListProperty>

#include <QThread>
#include <QVector>
#include <QDebug>

#include <QJsonValue>
#include "exc_screen_config.h"

//#define _SQL_DEBUG_PRINT_

class Sql_MCDefine: public QThread
{
    Q_OBJECT
//    Q_PROPERTY(QQmlListProperty<QVector<QString>> qml_vecResultRecord READ get_vecResultRecordToQml)
public:
    Sql_MCDefine();
    ~Sql_MCDefine();

public:
//    QQmlListProperty<QString> get_vecResultRecordToQml();
    //创建数据库并建立连接
    bool OpenDb(void);
    //关闭数据库
    void CloseDb(void);
    //是否成功开启
    bool IsOpenSuccess(void){
        return db.isOpen();
    }

    //查询和显示结果DEMO
    void QueryTable();

    //********************* 传入语句查询 **********************
    //查询和显示结果-qml接口，1项
    Q_INVOKABLE QJsonValue qml_queryTableOnce(QString i_str);
    QVariant cpp_queryTableOne(QString i_str);
    //查询和显示结果-qml接口，多项、单个
    Q_INVOKABLE QVector<QString> qml_queryTableManyRetVec(QString i_str);
    //查询和显示结果-qml接口，多项，多个
    bool cpp_queryTable2D(QString i_str, QVector<QVector<QVariant> > &o_vec);
    Q_INVOKABLE QVector<QString> qml_queryTable2DRetVec1D(QString i_str);

    //********************* 特殊查询 **********************
    //查询状态量，i_prefixion-前缀名；i_tableName-表名；i_function-位作用名
    int cpp_getBitDec(QString i_prefixion, QString i_tableName, QString i_function,
                               QVector<int> &o_dec, QVector<int> &o_bit);

    //********************* 指定表查询 **********************
    //查询和显示结果-qml接口，1项
    Q_INVOKABLE QJsonValue qml_queryTableRegDef(QString i_str);
    Q_INVOKABLE QJsonValue qml_queryTableMcDef(QString i_str);
    Q_INVOKABLE QJsonValue qml_queryTableWriteDef(QString i_str);

private:
    QSqlDatabase db;//用于建立和数据库的连接
//    QVector<QString> o_queryResult;
};



#endif // SQL_MCDEFINE_H
